<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>ExifTool Object Data Members</title>
<link rel=stylesheet type='text/css' href='style.css' title='Style'>
</head>
<body>
<h2 class='up'>ExifTool Object Data Members</h2>

<p>The following table lists the data members of the ExifTool object.  (If this
was C++, these would be documented next to the definitions in the header file,
but this is Perl, so I couldn't do that...)</p>

<p>Aside from the variables defined below, there may be other temporary
variables added by individual modules. Temporary variables are identified by at
least one lower case letter in their name, and are deleted automatically before
reading or writing each new image.  Make, Model and CameraType are temporary
variables like this, but these three are special because they are initialized to
an empty string instead of being deleted at the start of processing for each
image, which allows them to be tested without having to check for an undefined
value.</p>

<blockquote><table class='norm'><tr><th>Name</th><th>Description</th></tr>

<tr><td>ADD_DIRS</td><td>Hash of parent directories for each directory added during
    writing (Note: entry may exist but be undefined for top-level
    directory!)  To avoid adding a directory twice, entries may be
    deleted from this lookup, but only AFTER WriteDirectory() is called.</td></tr>

<tr><td>BASE</td><td>Absolute position of current image in containing file
    (for example, when processing JPEG image in FujiFilm RAF file)</td></tr>

<tr><td>BOTH</td><td>Reference to HASH of ValueConv/PrintConv arrays, saved for
    tags when GetValue is called for 'Both' values, and used to avoid having to
    recalculate both values again (which speeds up building the Composite tags
    because often the same tag is Require'd by multiple Composite tags).</td></tr>

<tr><td>CameraType</td><td>Camera type used for decoding some Olympus tags</td></tr>

<tr><td>CHANGED</td><td>Number of tags changed during writing</td></tr>

<tr><td>CHARSET</td><td>Lookup table for current Charset setting</td></tr>

<tr><td>CHECK_WARN</td><td>Used to return CHECK_PROC warnings</td></tr>

<tr><td>Cleanup</td><td>List of subroutines to call before returning from Extract().
    Call AddCleanup() to add to this list.</td></tr>

<tr><td>COMP_KEYS</td><td>Lookup for tag keys used in Composite tags</td></tr>

<tr><td>Compression</td><td>Compression for current EXIF IFD (or '' if no Compression tag).
    Valid only in EXIF directories for tags after 0x0103.</td></tr>
    
<tr><td>CUR_LANG</td><td>Hash reference for localized language lookup corresponding
    to current 'Lang' options setting.</td></tr>

<tr><td>CUR_WRITE_GROUP</td><td>Current family 1 group while writing.  Currently
    used only when writing QuickTime tracks.</td></tr>

<tr><td>DEL_GROUP</td><td>Hash of groups to delete.  Value is 1 to delete group
    completely, or 2 if tags were added back after deleting the group.  May
    have a leading "-" if excluded from a delete.</td></tr>

<tr><td>DEL_PREVIEW</td><td>Flag to delete preview from after JPEG EOI</td></tr>

<tr><td>DemoteErrors</td><td>Errors are demoted to warnings and this count is
    incremented if non-zero to begin with</td></tr>

<tr><td>DIR_COUNT</td><td>Hash reference for counters of various types of directories (ICC, IPTC,...)</td></tr>

<tr><td>DIR_NAME</td><td>Name of directory currently being processed</td></tr>

<tr><td>DOC_COUNT</td><td>Number of top-level embedded sub-documents processed while
    extracting, or 0 if none were processed</td></tr>

<tr><td>DOC_NUM</td><td>Current document number while extracting (0, '' or undef for the
    main document).  May contain a hyphen for sub-subdocuments (eg. '2-3-2').</td></tr>

<tr><td>DoneID3</td><td>Set to 1 if audio file was scanned for ID3,
    or 2 if there was an ID3v1 trailer found</td></tr>

<tr><td>DropTags</td><td>Flag to exclude "Drop" tags when writing</td></tr>

<tr><td>DUPL_TAG</td><td>Hash of last used tag key index numbers for each duplicate tag.</td></tr>

<tr><td>EDIT_DIRS</td><td>Hash of parent directories for each directory edited during
    writing (Note: entry may exist but be undefined for top-level
    directory!)</td></tr>

<tr><td>End</td><td>Used by application to signal end of processing</td></tr>

<tr><td>EndDir</td><td>Used by application to signal end of the current directory</td></tr>

<tr><td>ESCAPE_PROC</td><td>Routine for XML or HTML escaping if Escape option is set</td></tr>

<tr><td>EXCL_TAG_LOOKUP</td><td>Hash for looking up excluded tags (keys are lower case tag names without group)</td></tr>

<tr><td>EXCL_XMP_LOOKUP</td><td>Hash for looking up excluded "XMP-xxx:yyy" tags (keys are lower case including group).
    "XMP-xxx" may be any ExifTool family 1 XMP group name, or "XMP-all" for any XMP group.  "yyy" may
    be any XMP property name (NOT ExifTool tag name), or "all" for all tags in a group</td></tr>

<tr><td>EXIF_DATA</td><td>EXIF data block (valid while reading from file)</td></tr>

<tr><td>EXIF_POS</td><td>Position of EXIF data in file</td></tr>

<tr><td>FILENAME</td><td>Name of input file while extracting (only if we opened it, '' otherwise)</td></tr>

<tr><td>FILE_ORDER</td><td>Hash of numbers to give the sequence the tags were
    extracted from file, keyed by tag key</td></tr>

<tr><td>FILE_EXT</td><td>Upper-case file extension (JPG, PEF, AVI, etc...) May be undefined if
    file has no extension.</td></tr>

<tr><td>FILE_SEQUENCE</td><td>File sequence number when extracting information</td></tr>

<tr><td>FILE_TYPE</td><td>Root file format type (JPEG, TIFF, RIFF, etc...)</td></tr>

<tr><td>FileType</td><td>Actual identified file type</td></tr>

<tr><td>FIRST_EXIF_POS</td><td>Position of first EXIF in file</td></tr>

<tr><td>FMT_EXPR</td><td>The current advanced formatting expression when interpolating tag
    values in a string.  This member allows the formatting expression to be accessed in
    the ValueConv function of user-defined Composite tags, which provided a mechanism for
    arguments to be passed to the ValueConv function.</td></tr>

<tr><td>FORCE_WRITE</td><td>Hash reference for metadata types that are being forced to be
    rewritten (see Extra ForceWrite tag)</td></tr>

<tr><td>FOUND_DIR</td><td>Names of directories found in file (used by Validate feature)</td></tr>

<tr><td>FOUND_TAGS</td><td>Found tags with proper case and order</td></tr>

<tr><td>GLOBAL_TIME_OFFSET</td><td>Time offset hash for first shifted date/time value of GlobalTimeShift option</td></tr>

<tr><td>HTML_DUMP</td><td>Reference to HtmlDump object when using HtmlDump feature</td></tr>

<tr><td>INDENT</td><td>Indent string for verbose output</td></tr>

<tr><td>INDENT2</td><td>Indent used in verbose SetNewValue output before writing</td></tr>

<tr><td>IN_RESOURCE</td><td>Flag indicates we are processing the resource fork of a Mac OS file</td></tr>

<tr><td>IO_TAG_LIST</td><td>List for output of requested tags in proper case and order</td></tr>

<tr><td>IsWriting</td><td>Flag set to indicate that metadata is being written to this file</td></tr>

<tr><td>LIST_TAGS</td><td>Hash of tag keys by tagInfo reference for active list-type
    tags.  This hash is cleared at the start of processing for each directory.
    Not used when writing.</td></tr>

<tr><td>LONG_PATH_IN</td><td>Cached input to the WindowsLongPath function</td></tr>

<tr><td>LONG_PATH_OUT</td><td>Cached return value from the WindowsLongPath function</td></tr>

<tr><td>LOW_PRIORITY_DIR</td><td>Lookup based on directory name for directories where
    undefined Priority tags get set to Priority 0 (eg. PreviewIFD in all images,
    and IFD1 in JPEG images).  This is equivalent to setting PRIORITY to 0 for
    the tag table only for a specific directory name.  A '*' entry in the lookup
    causes the priority of tags in any directory to be lowered.</td></tr>

<tr><td>Make</td><td>Camera make set during reading and writing</td></tr>

<tr><td>MAKER_NOTE_BYTE_ORDER</td><td>Byte order of extracted maker notes if extracted
    as a block.</td></tr>

<tr><td>MAKER_NOTE_INFO</td><td>Used by Image::ExifTool::CanonRaw as temporary storage for
    maker note information when synthesizing maker notes from CRW file with the
    MakerNotes option.</td></tr>

<tr><td>MAKER_NOTE_FIXUP</td><td>Fixup information for maker notes extracted with the MakerNotes
    option (unless MakerNotes option is 2). Used by SetNewValuesFromFile() to adjust offsets
    in maker note IFD</td></tr>

<tr><td>Model</td><td>Camera model name set during reading and writing</td></tr>

<tr><td>MOVED_KEY</td><td>Tag key of last tag replaced by a higher priority tag
    in a call to FoundTag().</td></tr>

<tr><td>NEW_VALUE</td><td>Hash of new value information keyed by tag info reference.
    Elements of new value information hash are:
    <table class='clear'>
    <tr valign='top'><td>TagInfo</td><td>-</td><td>tag information reference</td></tr>
    <tr valign='top'><td>DelValue</td><td>-</td><td>list of specific values to delete</td></tr>
    <tr valign='top'><td>Value</td><td>-</td><td>list of values to add</td></tr>
    <tr valign='top'><td>IsCreating</td><td>-</td><td>must be set for the tag to be added, otherwise just
        changed if it already exists.  A value of 2 will create a new tag if its group already
        exists, but won't add a new group</td></tr>
    <tr valign='top'><td>EditOnly</td><td>-</td><td>flag set if tag should never be created (regardless
        of file type). If this is set, then IsCreating must be false</td></tr>
    <tr valign='top'><td>CreateOnly</td><td>-</td><td>flag set if creating only (never edit existing tag)</td></tr>
    <tr valign='top'><td>CreateGroups</td><td>-</td><td>hash of all family 0 group names where tag may be created</td></tr>
    <tr valign='top'><td>WriteGroup</td><td>-</td><td>group name where information is being written (correct case)</td></tr>
    <tr valign='top'><td>WantGroup</td><td>-</td><td>group name as specified in call to function (case insensitive)</td></tr>
    <tr valign='top'><td>Next</td><td>-</td><td>reference to next new value hash in linked list
        if there is more than one new value hash (for writing to different groups) for this
        tagInfo</td></tr>
    <tr valign='top'><td>NoReplace</td><td>-</td><td>set if value was created with Replace=0</td></tr>
    <tr valign='top'><td>AddBefore</td><td>-</td><td>number of list items added by a subsequent Replace=0 call</td></tr>
    <tr valign='top'><td>IsNVH</td><td>-</td><td>flag indicating this is a new value hash (always 1)</td></tr>
    <tr valign='top'><td>Order</td><td>-</td><td>counter to indicate the order that new value hashes were created</td></tr>
    <tr valign='top'><td>Shift</td><td>-</td><td>shift value</td></tr>
    <tr valign='top'><td>Save</td><td>-</td><td>flag set by call to SaveNewValues() if this value
        should be saved</td></tr>
    <tr><td colspan=3>MAKER_NOTE_FIXUP - pointer to fixup if necessary for a maker note value</td></tr>
    </table></td></tr>

<tr><td>NewIPTCDigest</td><td>MD5 digest for most recently written IPTC data (undefined if IPTC doesn't
    exist or if it was deleted).  Calculated only if a value of 'new' is being written/deleted
    to/from the Photoshop:IPTCDigest tag</td></tr>

<tr><td>NO_LIST</td><td>Set if List tags shouldn't be accumulated into a list.  Undefined to
    accumulate lists as usual, or 0 to accumulate lists in TAG_EXTRA "NoList" element (and
    set a TAG_EXTRA "NoListDel" flag for tags that wouldn't have been created).</td></tr>

<tr><td>NO_STRUCT</td><td>Set if structures shouldn't be restored for this metadata.  Used
    to avoid restoring structures for non-XMP (eg. XML) information.</td></tr>

<tr><td>NO_STRUCT_WARN</td><td>Set if structures warnings should be ignored when rebuilding
    structures (for questionable XML).</td></tr>

<tr><td>NO_UNKNOWN</td><td>Don't generate unknown tags automatically even if Unknown option is set</td></tr>

<tr><td>NUM_FOUND</td><td>Number of tags found</td></tr>

<tr><td>NV_COUNT</td><td>Counter incremented for each NEW_VALUE hash created</td></tr>

<tr><td>OldIPTCDigest</td><td>MD5 digest for original IPTC data (undefined if IPTC didn't
    exist).  Calculated only if a value of 'old' is being written/deleted to/from the
    Photoshop:IPTCDigest tag</td></tr>

<tr><td>OPTIONS</td><td>ExifTool options</td></tr>

<tr><td>PATH</td><td>List reference to SubDirectory path.  eg)
    [qw(JPEG APP13 Photoshop IPTC)]</td></tr>

<tr><td>PDF_CAPTURE</td><td>Used by PDF module to store information when writing</td></tr>

<tr><td>PreferredGroup</td><td>Preferred family 1 group for writing tags to the current file.
    Not defined to use the default group priorities.  Set in call to InitWriteDirs().</td></tr>

<tr><td>PREVIEW_INFO</td><td>Information about preview image used while writing JPEG
    images only.  This is a reference to a hash with the following entries:
    <table class='clear'>
    <tr valign='top'><td>Absolute</td><td>-</td><td>flag set if PreviewImage pointer is relative to the
    start of file</td></tr>
    <tr><td>BaseShift</td><td>-</td><td>shift for base of pointer offsets</td></tr>
    <tr valign='top'><td>Data</td><td>-</td><td>data for PreviewImage to be written (may either be data
    for the old or new image, or 'LOAD_PREVIEW' to indicate that the data must be loaded from outside
    the EXIF segment)</td></tr>
    <tr><td>Fixup</td><td>-</td><td>[mandatory] fixup for PreviewImage pointers when writing JPEG images</td></tr>
    <tr valign='top'><td>IsShort</td><td>-</td><td>flag indicates PreviewImage pointers
    are 2-byte (instead of 4-byte) integers</td></tr>
    <tr valign='top'><td>IsTrailer</td><td>-</td><td>flag indicates image should always be written as a JPEG
    trailer, even if it fits inside the APP1 EXIF segment (as with Samsung STMN maker notes)</td></tr>
    <tr><td>Relative</td><td>-</td><td>flag to indicate that pointer offsets are relative</td></tr>
    </table></td></tr>

<tr><td>PRIORITY</td><td>Hash of tag Priority values for current tag, keyed by tag name (not tag key!)</td></tr>

<tr><td>PRIORITY_DIR</td><td>Name of priority directory (ie. the IFD for the full resolution image)</td></tr>

<tr><td>PROCESSED</td><td>Reference to hash of address/directory names which were processed
    during reading and/or writing</td></tr>

<tr><td>RAF</td><td>Random access file object for reading from input file</td></tr>

<tr><td>Recreated</td><td>Directories recreated when writing (used to prevent recreating
    multiple directories of the same type)</td></tr>

<tr><td>REQUESTED_TAGS</td><td>List of requested tags in original case</td></tr>

<tr><td>REQ_TAG_LOOKUP</td><td>Hash for looking up requested tags (keys are lower case tag names)</td></tr>

<tr><td>SAVE_COUNT</td><td>Counts number of times SaveNewValues() has been called</td></tr>

<tr><td>SAVE_DEL_GROUP</td><td>Hash of saved DEL_GROUP entries</td></tr>

<tr><td>SAVE_NEW_VALUE</td><td>Hash of new value information which was overwritten after
    a call to SaveNewValues()</td></tr>

<tr><td>SaveFormat</td><td>Hash reference to check which TIFF format types were used
    in the file.  Valid only if the (undocumented) SaveFormat option is used.
    Used by config_files/tiff_version.config.</td></tr>
    
<tr><td>SET_GROUP0</td><td>Value to use for family 0 group name when new tags
    are found</td></tr>

<tr><td>SET_GROUP1</td><td>Value to use for family 1 group name when new tags
    are found.  May start with a '+' sign to add to existing group name</td></tr>

<tr><td>SubfileType</td><td>SubfileType for current EXIF IFD (or '' if no SubfileType tag).
    Valid only in EXIF directories for tags after 0x00fe.</td></tr>
    
<tr><td>TAG_EXTRA</td><td>Hash of extra tag information keyed by tag key.  Current extra
information may include:
    <table class='clear'>
    <tr valign='top'><td>G0</td><td>-</td><td>override for family 0 group name</td></tr>
    <tr valign='top'><td>G1</td><td>-</td><td>dynamic family 1 group name (eg. IFD name or XMP
        namespace), with a leading '+' to add value to the existing group 1 name</td></tr>
    <tr valign='top'><td>G3</td><td>-</td><td>number for embedded documents (eg. 1, 2, etc)</td></tr>
    <tr valign='top'><td>G#</td><td>-</td><td>family # group name</td></tr>
    <tr valign='top'><td>Units</td><td>-</td><td>used internally to store units for GoPro values</td></tr>
    <tr valign='top'><td>Struct</td><td>-</td><td>used internally to store structure properties</td></tr>
    <tr valign='top'><td>NoList</td><td>-</td><td>used internally to store values for List-type tags</td></tr>
    <tr valign='top'><td>NoListDel</td><td>-</td><td>flag used internally to delete value if included in another list</td></tr>
    <tr valign='top'><td>Fixup</td><td>-</td><td>fixup information for maker notes block</td></tr>
    <tr valign='top'><td>BinVal</td><td>-</td><td>raw binary value of tag if SaveBin option is set</td></tr>
    <tr valign='top'><td>Rational</td><td>-</td><td>rational tag value as a string fraction</td></tr>
    </table></td></tr>

<tr><td>TAG_INFO</td><td>Hash of tagInfo hash references, keyed by tag key</td></tr>

<tr><td>TAGS_FROM_FILE</td><td>Flag used during extraction when called from SetNewValuesFromFile().
    Test this flag when extracting tags that are not normally extracted.</td></tr>

<tr><td>TIFF_END</td><td>Location of end of regular TIFF file set by WriteExif()</td></tr>

<tr><td>TIFF_TYPE</td><td>Type of TIFF data, only set if FILE_TYPE is TIFF.  Valid values
    are APP1, APP3, TIFF, CR2, MRW, JP2, JPX, NEF, PEF, ORF, DNG, etc.</td></tr>

<tr><td>Validate</td><td>Flag to do extra validation checks</td></tr>

<tr><td>VALUE</td><td>Hash of raw tag values keyed by tag key</td></tr>

<tr><td>WAS_WARNED</td><td>Hash of warning messages that have been issued once already</td></tr>

<tr><td>WRITE_GROUPS</td><td>List of write groups in order of priority</td></tr>

<tr><td>WRITE_PRIORITY</td><td>Hash of write priority values keyed by group name</td></tr>

<tr><td>WRITTEN</td><td>Hash of tags written (currently used only for filesystem date/time tags)</td></tr>

<tr><td>XMP_CAPTURE</td><td>Hash of tag information (value, attribute hash) keyed by XMP
    property path, used by XMP module during writing</td></tr>

<tr><td>XMP_ERROR</td><td>Error string used by XMP module during writing</td></tr>

<tr><td>XMP_NS</td><td>Hash of URI's keyed by namespace prefix, used by XMP module
    during writing to remember all used namespaces</td></tr>

</table></blockquote>
<hr>
<p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p>
</body>
</html>
